package com.smart.community.region.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.region.entity.Community;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 社区数据访问接口
 *
 * @author Wu.Liang
 * @since 2024-12-21
 */
@Mapper
public interface CommunityMapper extends BaseMapper<Community> {

    /**
     * 根据社区编码查询社区
     * @param communityCode 社区编码
     * @return 社区实体
     */
    Community selectByCommunityCode(@Param("communityCode") String communityCode);

    /**
     * 根据区域ID查询社区列表
     * @param regionId 区域ID
     * @return 社区列表
     */
    List<Community> selectByRegionId(@Param("regionId") Long regionId);

    /**
     * 批量查询社区
     * @param communityIds 社区ID列表
     * @return 社区列表
     */
    List<Community> selectBatchByIds(@Param("communityIds") List<Long> communityIds);

    /**
     * 根据用户权限查询社区列表
     * @param userId 用户ID
     * @return 有权限的社区列表
     */
    List<Community> selectByUserPermission(@Param("userId") Long userId);

    /**
     * 检查社区编码是否存在
     * @param communityCode 社区编码
     * @param excludeId 排除的社区ID
     * @return 是否存在
     */
    Boolean existsByCommunityCode(@Param("communityCode") String communityCode, @Param("excludeId") Long excludeId);

    /**
     * 批量更新社区状态
     * @param communityIds 社区ID列表
     * @param status 状态
     * @return 更新数量
     */
    Integer batchUpdateStatus(@Param("communityIds") List<Long> communityIds, @Param("status") Integer status);

    /**
     * 批量删除社区
     * @param communityIds 社区ID列表
     * @return 删除数量
     */
    Integer batchDeleteByIds(@Param("communityIds") List<Long> communityIds);

    /**
     * 统计社区数量
     * @param regionId 区域ID（可选）
     * @return 社区数量
     */
    Long countCommunities(@Param("regionId") Long regionId);

    /**
     * 查询启用的社区列表
     * 分页查询社区列表
     * 根据社区名称模糊查询
     * 更新社区统计信息
     * @param community 查询条件
     * @param communityCode 社区编码
     * @param communityId 社区ID
     * @param communityIds 社区ID列表
     * @param communityName 社区名称
     * @param excludeId 排除的社区ID（更新时使用）
     * @param page 分页参数
     * @param regionId 区域ID
     * @param status 状态
     * @return 分页结果
     * @return 更新数量
     * @return 删除数量
     * @return 社区列表
     * @return 社区数量
     * @return 社区信息
     * @return 是否存在
     */
    IPage<Community> selectCommunityPage(Page<Community> page, @Param("community") Community community);

    List<Community> selectByCommunityNameLike(@Param("communityName") String communityName);

    List<Community> selectEnabledCommunities();

    int countByRegionId(@Param("regionId") Long regionId);

    int updateCommunityStats(@Param("communityId") Long communityId);

    int updateStatusByIds(@Param("communityIds") List<Long> communityIds, @Param("status") Integer status);
} 
